﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using KProject.Model;
using KProject.DAL;
using KProject.View;
using System.Windows.Forms;

namespace KProject.Controller
{
    public class ConcursoController
    {
        private Concurso concurso = new Concurso();
        List<Concurso> concursos = new List<Concurso>();

        public Concurso Concurso
        {
            get
            {
                return concurso;
            }
            set
            {
                concurso = Concurso;
            }
        }

        public void Abrir(FormPrincipal principal, TabControl tabControl, ToolStripMenuItem menuEditar, ToolStripMenuItem menuFechar)
        {
            if (tabControl.Visible)
            {
                DialogResult dialogResult = MessageBox.Show("Deseja fechar este concurso?", "Fechar", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dialogResult == DialogResult.Yes)
                {
                    concurso = new Concurso();
                    tabControl.Visible = false;
                    menuEditar.Enabled = false;
                    menuFechar.Enabled = false;
                    principal.Text = "KProject";
                }
                else
                {
                    return;
                }
            }

            concursos = ConcursosDAL.List();
            if (concursos.Count == 0)
            {
                throw new VerifyingException("Não existe nenhum concurso cadastrado.");
            }
            else
            {
                FormAbrirConcurso abrir = new FormAbrirConcurso(this);
                abrir.ShowDialog();

                if (concurso.Nome != null)
                {
                    principal.Text = concurso.Nome;
                    tabControl.Visible = true;
                    menuEditar.Enabled = true;
                    menuFechar.Enabled = true;
                }
            }
        }

        public void CarregarLista(ListBox lbConcursos)
        {
            lbConcursos.DataSource = null;
            lbConcursos.DataSource = concursos;
            lbConcursos.DisplayMember = "Nome";
        }

        public void CarregarConcurso(ListBox lbConcursos)
        {
            if (lbConcursos.SelectedItems.Count == 0)
            {
                throw new VerifyingException("Selecione um concurso.");
            }
            else
            {
                concurso = concursos[lbConcursos.SelectedIndex];
            }
        }

        public void Novo(FormPrincipal principal, TabControl tabControl, ToolStripMenuItem menuEditar, ToolStripMenuItem menuFechar)
        {
            if (tabControl.Visible)
            {
                DialogResult dialogResult = MessageBox.Show("Deseja fechar este concurso?", "Fechar", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dialogResult == DialogResult.Yes)
                {
                    concurso = new Concurso();
                    tabControl.Visible = false;
                    menuEditar.Enabled = false;
                    menuFechar.Enabled = false;
                    principal.Text = "KProject";
                }
                else
                {
                    return;
                }
            }

            FormConcurso novo = new FormConcurso(this, false);
            novo.ShowDialog();

            if (concurso.Nome != null)
            {
                principal.Text = concurso.Nome;
                tabControl.Visible = true;
                menuEditar.Enabled = true;
                menuFechar.Enabled = true;
            }
        }

        public void Salvar(TextBox tbNomeConcurso, DateTimePicker dpDataConcurso, TextBox tbCidadeConcurso)
        {
            if (tbNomeConcurso.Text == null || tbNomeConcurso.Text.Trim().Length < 1)
            {
                throw new VerifyingException("Insira o nome do concurso");
            }
            else if (dpDataConcurso.Value == null)
            {
                throw new VerifyingException("Insira a data do concurso");
            }
            else if (tbCidadeConcurso.Text == null || tbCidadeConcurso.Text.Trim().Length < 1)
            {
                throw new VerifyingException("Insira a cidade do concurso");
            }
            else
            {
                concurso.Nome = tbNomeConcurso.Text;
                concurso.Data = dpDataConcurso.Value;
                concurso.Cidade = tbCidadeConcurso.Text;

                if(concurso.Id == 0)
                    concurso.Id = ConcursosDAL.Insert(concurso);
                else
                    ConcursosDAL.Update(concurso);
            }
        }

        public void Editar(FormPrincipal principal)
        {
            FormConcurso editar = new FormConcurso(this, true);
            editar.ShowDialog();

            principal.Text = concurso.Nome;
        }

        public void Fechar(FormPrincipal principal, TabControl tabControl, ToolStripMenuItem menuEditar, ToolStripMenuItem menuFechar)
        {
            DialogResult dialogResult = MessageBox.Show("Deseja fechar este concurso?", "Fechar", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dialogResult == DialogResult.Yes)
            {
                concurso = new Concurso();
                tabControl.Visible = false;
                menuEditar.Enabled = false;
                menuFechar.Enabled = false;
                principal.Text = "KProject";
            }
            else
            {
                return;
            }
        }

        public void Sair(FormPrincipal principal, TabControl tabControl, ToolStripMenuItem menuEditar, ToolStripMenuItem menuFechar)
        {
            if (tabControl.Visible)
            {
                DialogResult dialogResult = MessageBox.Show("Deseja fechar este concurso?", "Fechar", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dialogResult == DialogResult.No)
                {
                    return;
                }
            }
            principal.Close();
        }
    }
}
